<?php

/**
 * Error controller
 *
 * @uses       Beaver_Controller_Action
 * @package    Beaver
 * @subpackage Controller
 */
class Beaver_ErrorController extends Beaver_Controller_Action
{
    /**
     * errorAction() is the action that will be called by the "ErrorHandler" 
     * plugin.  When an error/exception has been encountered
     * in a ZF MVC application (assuming the ErrorHandler has not been disabled
     * in your bootstrap) - the Errorhandler will set the next dispatchable 
     * action to come here.  This is the "default" module, "error" controller, 
     * specifically, the "error" action.  These options are configurable, see 
     * {@link http://framework.zend.com/manual/en/zend.controller.plugins.html#zend.controller.plugins.standar
     *
     * @return void
     */
    public function errorAction()
    {
        $errors = $this->_getParam('error_handler');
        
        switch ($errors->type) { 
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                // 404 error -- controller or action not found
                if( !isset( $this->_request->extData ) ) $this->getResponse()->setHttpResponseCode(404);
                $this->view->message = 'Page not found';
                break;

            default:
                // application error 
                if( !isset( $this->_request->extData ) ) $this->getResponse()->setHttpResponseCode(500);
                $this->view->message = 'Application error';
                break;
        }
        
        if( !isset( $this->_request->extData ) )
        {
        	$this->setResponseToHtml();
        	$this->view->request   = $errors->request;
        	$this->view->exception = $errors->exception;
        }
        else
        {
        	$where = "Trace:<br/>" . 
        	nl2br($errors->exception->getTraceAsString()) . "<br/>" . 
        	"ExtData:<br/>" . json_encode($this->_request->extData);

        	$exception = json_encode(array(
	        	"message" => $errors->exception->getMessage(),
	        	"where"   => $where 
        	));
        	$this->view->exception = substr( substr($exception, 1), 0,-1 );
        }
        $this->view->type = "exception";
    }
}
